/**
 * 单个省份的结构
 */
export interface DictItem {
  /**
   * ID
   */
  id: number;
  /**
   * 创建时间
   */
  createTime: string;
  /**
   * 更新时间
   */
  updateTime: string;
  /**
   * 是否删除
   */
  isDeleted: number;
  /**
   * 参数
   */
  param: {};
  /**
   * 父级 ID
   */
  parentId: number;
  /**
   * 名称
   */
  name: string;
  /**
   * 值
   */
  value: string;
  /**
   * 编码
   */
  dictCode?: any;
  /**
   * 是否有子元素
   */
  hasChildren: boolean;
}

export interface SearchParams {
  hoscode?: string;
  hosname?: string;
  hostype?: string;
  provinceCode?: string;
  cityCode?: string;
  districtCode?: string;
  status?: number;
}

/**
 * 请求获取医院列表参数的结构
 */
export interface ReqGetHospitalListParams extends SearchParams {
  page: number;
  limit: number;
}

/**
 * 获取医院列表的响应结构
 */
export interface ReqGetHospitalListResponse {
  /**
   * 医院列表
   */
  content: HospitalListItem[];
  /**
   * 分页相关的参数
   */
  pageable: Pageable;
  /**
   * 总的页码数
   */
  totalPages: number;
  /**
   * 总的数据的数量
   */
  totalElements: number;
  /**
   * 是否是最后一页
   */
  last: boolean;
  /**
   * 是否为第一页
   */
  first: boolean;
  /**
   * 排序相关的参数
   */
  sort: Sort;
  /**
   * 本次返回结果的数量
   */
  numberOfElements: number;
  /**
   * 大小
   */
  size: number;
  number: number;
  /**
   * 是否为空
   */
  empty: boolean;
}

interface Pageable {
  sort: Sort;
  pageNumber: number;
  pageSize: number;
  offset: number;
  paged: boolean;
  unpaged: boolean;
}

interface Sort {
  sorted: boolean;
  unsorted: boolean;
  empty: boolean;
}

//单条数据的结构
export interface HospitalListItem {
  /**
   * id
   */
  id: string;
  /**
   * 创建时间
   */
  createTime: string;
  /**
   * 更新时间
   */
  updateTime: string;
  /**
   * 是否删除
   */
  isDeleted: number;
  /**
   * 医院的参数
   */
  param: Param;
  /**
   * 医院编号
   */
  hoscode: string;
  /**
   * 医院名称
   */
  hosname: string;
  /**
   * 医院类型
   */
  hostype: string;
  /**
   * 省份编号
   */
  provinceCode: string;
  /**
   * 城市编号
   */
  cityCode: string;
  /**
   * 区域编号
   */
  districtCode: string;
  /**
   * 地址
   */
  address: string;
  /**
   * logo
   */
  logoData: string;
  /**
   * 医院介绍
   */
  intro: string;
  /**
   * 乘车路线
   */
  route: string;
  /**
   * 状态
   */
  status: number;
  /**
   * 预约规则
   */
  bookingRule: BookingRule;
}

interface BookingRule {
  /**
   * 预约周期
   */
  cycle: number;
  /**
   * 放号时间
   */
  releaseTime: string;
  /**
   * 停止时间
   */
  stopTime: string;
  /**
   * 退号日期
   */
  quitDay: number;
  /**
   * 退号时间
   */
  quitTime: string;
  /**
   * 预约规则
   */
  rule: string[];
}

interface Param {
  /**
   * 医院类型字符串
   */
  hostypeString: string;
  /**
   * 医院地址
   */
  fullAddress: string;
}

/**
 * 医生数据的结构
 */
export interface DoctorItem {
  /**
   * ID
   */
  id: string;
  /**
   * 创建时间
   */
  createTime: string;
  updateTime: string;
  isDeleted: number;
  param: DoctorParam;
  /**
   * 医院的编号
   */
  hoscode: string;
  /**
   * 科室的编号
   */
  depcode: string;
  /**
   * 职称
   */
  title: string;
  /**
   * 医生的姓名
   */
  docname: string;
  /**
   * 医生的专业技能
   */
  skill: string;
  /**
   * 日期
   */
  workDate: string;
  workTime: number;
  /**
   * 总共的号源数量
   */
  reservedNumber: number;
  /**
   * 可用的号源数量
   */
  availableNumber: number;
  /**
   * 金额
   */
  amount: number;
  /**
   * 状态
   */
  status: number;
  hosScheduleId: string;
}

interface DoctorParam {
  /**
   * 星期
   */
  dayOfWeek: string;
  /**
   * 科室名称
   */
  depname: string;
  /**
   * 医院名称
   */
  hosname: string;
}

/**
 * 科室的结构
 */
export interface Department {
  depcode: string;
  depname: string;
  children: Department[] | null;
}

/**
 * 科室的复数
 */
export type Departments = Department[];

/**
 * 获取排班规则的参数结构
 */
export interface ReqGetScheduleParams {
  page: number;
  limit: number;
  hoscode: string;
  depcode: string;
}

/**
 * 排班规则响应结果的结构
 */
export interface ReqGetScheduleResponse {
  /**
   * 总数
   */
  total: number;
  /**
   * 排班数据的列表
   */
  bookingScheduleList: BookingScheduleList[];
  /**
   * 基础映射
   */
  baseMap: BaseMap;
}

interface BaseMap {
  /**
   * 医院名称
   */
  hosname: string;
}

/**
 * 单条排班数据的结构
 */
export interface BookingScheduleList {
  /**
   * 日期
   */
  workDate: string;
  /**
   * 日期
   */
  workDateMd?: any;
  /**
   * 星期
   */
  dayOfWeek: string;
  /**
   * 医生数量
   */
  docCount: number;
  /**
   * 总号源数
   */
  reservedNumber: number;
  /**
   * 可用号源数
   */
  availableNumber: number;
  status?: any;
}

/**
 * 获取医生的参数结构
 */
export interface ReqGetDoctorParams {
  workDate: string;
  depcode: string;
  hoscode: string;
}

/**
 * 医院详情响应结果
 */
export interface ReqGetHospitalDetailResponse  {
  bookingRule: BookingRule;
  hospital: Hospital;
}

interface Hospital {
  id: string;
  createTime: string;
  updateTime: string;
  isDeleted: number;
  param: HosParam;
  hoscode: string;
  hosname: string;
  hostype: string;
  provinceCode: string;
  cityCode: string;
  districtCode: string;
  address: string;
  logoData: string;
  intro: string;
  route: string;
  status: number;
  bookingRule?: any;
}

interface HosParam {
  hostypeString: string;
  fullAddress: string;
}
